package com.custom.source;


import com.custom.serde.DefaultEnumCheckpointSerializer;
import com.custom.serde.DefaultSplitSerializer;
import org.apache.flink.api.connector.source.Source;
import org.apache.flink.api.java.typeutils.ResultTypeQueryable;
import org.apache.flink.core.io.SimpleVersionedSerializer;

/**
 * 数据源类
 *
 * @param <T>        输出类型
 * @param <SplitT>   切片类型
 * @param <EnumChkT> 枚举分片保存点类型
 */
public interface ClinkSource<T, SplitT extends ClinkSourceSplit, EnumChkT extends ClinkEnumCheckpoint<SplitT>>
        extends Source<T, SplitT, EnumChkT>, ResultTypeQueryable<T> {

    /**
     * 默认的分片序列化器
     */
    default SimpleVersionedSerializer<SplitT> getSplitSerializer() {
        return new DefaultSplitSerializer<>();
    }

    /**
     * 默认的分片枚举器保存点序列化器
     */
    default SimpleVersionedSerializer<EnumChkT> getEnumeratorCheckpointSerializer() {
        return new DefaultEnumCheckpointSerializer<>();
    }
}
